//
//  Queue.c
//  Queue
//
//  Created by Xavier on 2023/10/16.
//

#include "Queue.h"



// 初始化队列
void QueueInit(Queue* q){
    q->front = q->rear = NULL;
}

// 队尾入队列
void QueuePush(Queue* q, QDataType data) {
    //开辟一个新的结点，用来接受传入的data
    QNode* newNode = (QNode*)malloc(sizeof(QNode));
    newNode->data = data;
    newNode->pNext = NULL;
    //判断是否队列是否为空
    if (q->rear == NULL) {
        q->front = q->rear = newNode;
    }else {
        q->rear->pNext = newNode;
        q->rear = newNode;
    }
}

// 队头出队列
void QueuePop(Queue* q) {
    q->front = q->front->pNext;
}

// 获取队列头部元素
QDataType QueueFront(Queue* q) {
    return q->front->data;
}

// 获取队列队尾元素
QDataType QueueBack(Queue* q) {
    return q->rear->data;
}
// 获取队列中有效元素个数
int QueueSize(Queue* q) {
    int count = 0;
    QNode* cur = q->front;
    while (cur) {
        ++count;
        cur = cur->pNext;
    }
    return count;
}

// 检测队列是否为空，如果为空返回非零结果，如果非空返回0
int QueueEmpty(Queue* q) {
    return (q->front==q->rear) == NULL ? -1 : 0;
    
}

// 销毁队列
void QueueDestroy(Queue* q);

//打印队列
void QueuePrint(Queue* q){
    QNode* cur = q->front;
    while (cur) {
        printf("|");
        printf("%d", cur->data);
        cur = cur->pNext;
        printf("|");
    }
    printf("\n");
}

